工厂方法的核心任务就是通过工厂中的方法返回对应的子工厂来创建一个对象返回给客户端。
抽象工厂
Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。
package com.ruishenh.designPatter.creational.factory.abstractFactory;
public class AbstractFactory {
public static void main(String[] args) {
TVFactory factory=new HaierFactory();
System.out.println(factory.createDTV().about());
System.out.println(factory.createFPTV().about());
//
TVFactory factory2=new HisenseFactory();
System.out.println(factory2.createDTV().about());
System.out.println(factory2.createFPTV().about());
}
}
interface TVFactory{
FPTVProduct createFPTV();
DTVProduct createDTV();
}
interface FPTVProduct{
String about();
}
interface DTVProduct{
String about();
}
class HaierFactory implements TVFactory{
@Override
public FPTVProduct createFPTV() {
//创建Haier的平板电视
return new FPTVProduct() {
@Override
public String about() {
return "Haier高清平板电视,我的尺寸特别小";
}
};
}
@Override
public DTVProduct createDTV() {
return new DTVProduct() {
@Override
public String about() {
return "Haier高清数字电视,我有X个频道";
}
};
}
}
class HisenseFactory implements TVFactory{
@Override
public FPTVProduct createFPTV() {
//创建Hisense的平板电视
return new FPTVProduct() {
@Override
public String about() {
return "Hisense高清平板电视,我的尺寸特别小";
}
};
}
@Override
public DTVProduct createDTV() {
return new DTVProduct() {
@Override
public String about() {
return "Hisense高清数字电视,我有N个频道";
}
};
}
}
抽象工厂的核心任务就是通过工厂中的方法返回对应的子工厂中的多个工厂中的一个,让后这个工厂可以返回多个产品的一个产品。
建造模式
将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。
package com.ruishenh.designPatter.creational.builder;
public class Builder {
public static void main(String[] args) {
//找到小明给组装电脑
BuilderComputer builderComputer=new buildWorker();
//小明是新手,要老师指导组装
Director director =new Director(builderComputer);
//小明装电脑
director.construct();
//组装完毕
builderComputer.getComputer();
}
}
//组装步骤
interface BuilderComputer{
//组装电源
void builderPower();
//组装机箱
void builderCrate();
//组装显示器
void builderDisplay();
//返回组装的整个电脑
Computer getComputer();
}
//组装工人
class buildWorker implements BuilderComputer{
HPComputer computer =new HPComputer();
@Override
public void builderPower() {
computer.setPower("德玛牌电源");
System.out.println("组装好了电源");
}
@Override
public void builderCrate() {
computer.setCrate("剑圣牌机箱");
System.out.println("组装好了机箱");
}
@Override
public void builderDisplay() {
computer.setCrate("剑姬牌显示器");
System.out.println("组装好了显示器");
}
@Override
public Computer getCompu