软件设计模式
创建型设计模式
一、实验目的
- 了解面向对象设计的原则和设计模式课程的研究内容;
- 掌握常见的创建型设计模式;
能运用创建型设计模式进行软件设计。
二、实验内容
(1)工厂方法
采用工厂方法重新设计上述图形工厂
(2)抽象工厂模式
小王在电脑城开了一家电脑公司,帮助客户组装电脑。在组装电脑时,每台电脑主机通常需要选择一系列的配件,比如CPU、硬盘、内存、主板、电源、机箱等。请为小王设计一款管理软件来辅助其工作,要求:
- 利用抽象工厂模式;
- 支持CPU、硬盘、主板配件;
- 为软件系统添加新的电脑主机类型;
- 扩展软件系统使其支持新类型的配件;
要求画出类图,编写源代码并写出测试代码。
三、实验源程序(或实验步骤)
1 工厂方法
- 类图
/**Circle.java
public class Circle implements Figure {
public Circle(){
}
public void finalize() throws Throwable {
}
public String display(){
return "zheshiyigeyuanxing";
}
public String getName(){
return "yuanxing";
}
}
/**CircleFactory.java
public class CircleFactory implements FigureFactory {
public CircleFactory() {
}
public void finalize() throws Throwable {
}
public Figure createFigure() {
return new Circle();
}
}
public class Client {
public Client(){
}
public void finalize() throws Throwable {
}
public void test(FigureFactory factory){
Figure fig=factory.createFigure();
System.out.println("图形名称:"+fig.getName());
System.out.println("图形显示:"+fig.display());
}
}
/**Figure
public interface Figure {
public String display();
public String getName();
}
/**FigureFactory
public interface FigureFactory {
public Figure createFigure();
}
/**Mainclass.java
public class Mainclass {
public static void main(String[] args) {
// TODO Auto-generated method stub
FigureFactory factory=new RectFactory();
Client client =new Client();
client.test(factory);
}
}
public class Rect implements Figure {
public Rect(){
}
public void finalize() throws Throwable {
}
public String display(){
return "zheshiyigejuxing";
}
public String getName(){
return "juxing";
}
}
public class Rect implements Figure {
public Rect(){
}
public void finalize() throws Throwable {
}
public String display(){
return "zheshiyigejuxing";
}
public String getName(){
return "juxing";
}
}
public class Triangle implements Figure {
public Triangle(){
}
public void finalize() throws Throwable {
}
public String display(){
return "zhehsiyigednajiaoxing";
}
public String getName(){
return "sanjiaoxing";
}
}
public class TriangleFactory implements FigureFactory {
public TriangleFactory(){
}
public void finalize() throws Throwable {
}
public Figure createFigure(){
return new Triangle();
}
}
2 抽象工厂模式
(1)类图
public class Client {
public Client(){
}
public void finalize() throws Throwable {
}
public int test(Computer computer){
CPU cpu=computer.createCPU();
Disk disk=computer.createDisk();
System.out.println("电脑配置如下:");
System.out.println(" CPU:");
System.out.println(" 名称:"+cpu.getName());
System.out.println(" 内核:"+cpu.getCores());
System.out.println(" 频率:"+cpu.getFrequency());
System.out.println(" Disk:");
System.out.println(" 内存:"+disk.getSize());
return 0;
}
}
public interface Computer {
public CPU createCPU();
public Disk createDisk();
}
public interface CPU {
public int getCores();
public int getFrequency();
public String getName();
}
public interface Disk {
public int getSize();
}
public class AMD implements CPU {
public AMD(){
}
public void finalize() throws Throwable {
}
public int getCores(){
return 16;
}
public int getFrequency(){
return 3000;
}
public String getName(){
return "AMD";
}
}
public class Disk1T implements Disk {
public Disk1T(){
}
public void finalize() throws Throwable {
}
public int getSize(){
return 1000;
}
}
public class Disk500G implements Disk {
public Disk500G(){
}
public void finalize() throws Throwable {
}
public int getSize(){
return 500;
}
}
public class Disk750G implements Disk {
public Disk750G(){
}
public void finalize() throws Throwable {
}
public int getSize(){
return 750;
}
}
public class GameComputer implements Computer {
public GameComputer(){
}
public void finalize() throws Throwable {
}
public CPU createCPU(){
return new IntelT7();
}
public Disk createDisk(){
return new Disk1T();
}
}
public class IntelT5 implements CPU {
public IntelT5(){
}
public void finalize() throws Throwable {
}
public int getCores(){
return 4;
}
public int getFrequency(){
return 2000;
}
public String getName(){
return "IntelT5";
}
}
public class IntelT7 implements CPU {
public IntelT7(){
}
public void finalize() throws Throwable {
}
public int getCores(){
return 4;
}
public int getFrequency(){
return 2500;
}
public String getName(){
return "ImtelT7";
}
}
public class NewComputer implements Computer {
public NewComputer(){
}
public void finalize() throws Throwable {
}
public CPU createCPU(){
return new AMD();
}
public Disk createDisk(){
return new Disk1T();
}
}
public class OfficeComputer implements Computer {
public OfficeComputer(){
}
public void finalize() throws Throwable {
}
public CPU createCPU(){
return new IntelT5();
}
public Disk createDisk(){
return new Disk500G();
}
}
public class MianClass {
public static void main(String[] args) {
//Computer computer=new NewComputer();
Computer computer=new OfficeComputer();
//Computer computer=new GameComputer();
Client client=new Client();
client.test(computer);
}
}
四、实验结果及分析
1 工厂方法
(1)实验结果截图
(2)实验结果分析
工厂方法定义一个用于创建对象的接口,但是让子类决定实例化哪个类。它的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将创建的工作交给子类去做。这个核心类成为一个抽象工厂的角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类实例化的细节。
2 抽象工厂模式
- 实验结果截图
- 实验结果分析
抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据里氏替换原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些抽象产