本文出自
本系列持续更新,敬请关注。
1 静态工厂
静态工厂介绍:
静态工厂模式可以实现接口封装隔离的原则。在客户端只知接口而不知实现的时候可以使用静态工厂模式。
角色:
Product:客户端需要使用的接口。 ConcreteProduct:Product的具体实现。Factory:拥有静态方法的工厂类,返回ConcreteProduct实例。Client:只知到Product。但是并不知道具体实现。
UML:
code:
package 设计模式.staticFactary;/* *2016年8月26日 上午10:15:22 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public interface Product { public void operation();}
package 设计模式.staticFactary;/* *2016年8月26日 上午10:15:00 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public class ConcreteProduct implements Product{ @Override public void operation() { System.out.println("我是具体产品中的实现方法"); }}
package 设计模式.staticFactary;/* *2016年8月26日 上午10:47:01 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public class Factory { public static Product getProduct(){ return new ConcreteProduct(); }}
package 设计模式.staticFactary;/* *2016年8月26日 上午10:48:05 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public class Client { public static void main(String[] args) { Product product=Factory.getProduct(); product.operation(); }}
2 AbstractFactory(抽象工厂)
AbstractFactory介绍:
AbstractFactory是为一系列相关的或者相互依赖的类创建接口,客户端不用关注他们的实现。相当如一个AbstractFactory的实现创建一个产品族。
AbstractFactory角色:
abstractProduct:抽象产品类。ConcreteProduct:具体的产品实现。abstractFactory:抽象工厂。ConcreteFactory:具体的工厂实现。
UML:
![这里写图片描述](https://github.com/Pin-Wang/JavaBasic/blob/master/src/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/abstractFactory/acstractFactory.png?raw=true)
场景:选用不同的方案来装机,主要是让cpu和主板配套。
code:
abstractProduct
package 设计模式.abstractFactory;/* *2016年9月2日 上午10:18:46 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public interface CpuAPI { public void calculate();}
abstractProduct
package 设计模式.abstractFactory;/* *2016年9月2日 上午10:18:46 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public interface MainBoardAPI { void install();}
ConcreteProduct
package 设计模式.abstractFactory;/* *2016年9月2日 上午10:20:38 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public class IntellCpu implements CpuAPI{ Integer cpuPins; public IntellCpu(Integer pins) { cpuPins=pins; } @Override public void calculate() { System.out.println("Intell cpu 正在计算....."+"pins:"+cpuPins); }}
ConcreteProduct
package 设计模式.abstractFactory;/* *2016年9月2日 上午10:20:38 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public class AMDCpu implements CpuAPI{ Integer cpuPins; public AMDCpu(Integer pins) { cpuPins=pins; } @Override public void calculate() { System.out.println("AMD cpu 正在计算....."+"pins:"+cpuPins); }}
package 设计模式.abstractFactory;/* *2016年9月2日 上午10:24:25 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/ConcreteProduct//技嘉主板public class GigaMainboard implements MainBoardAPI{ //插入cpu的接口pin数 Integer pins ; public GigaMainboard(Integer pins) { this.pins=pins; } @Override public void install() { System.out.println("技嘉主板正在安装.....pin数:"+pins); } }
ConcreteProduct
package 设计模式.abstractFactory;/* *2016年9月2日 上午10:24:25 *@Author Pin-Wang *@E-mail 1228935432@qq.com*///微星主板public class MSIMainboard implements MainBoardAPI{ //插入cpu的接口pin数 Integer pins ; public MSIMainboard(Integer pins) { this.pins=pins; } @Override public void install() { System.out.println("微星主板正在安装.....pin数:"+pins); } }
AbstractFactory
package 设计模式.abstractFactory;/* *2016年9月2日 上午10:29:07 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public interface AbstractFactory { CpuAPI createCPU(); MainBoardAPI createMainBoardAPI();}
ConcreteFactory
package 设计模式.abstractFactory;/* *2016年9月2日 上午10:31:01 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public class ConcreteFactoryA implements AbstractFactory{ @Override //intell cpu public CpuAPI createCPU() { return new IntellCpu(1156); } //技嘉主板 @Override public MainBoardAPI createMainBoardAPI() { return new GigaMainboard(1156); } }
ConcreteFactory
package 设计模式.abstractFactory;/* *2016年9月2日 上午10:31:01 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public class ConcreteFactoryB implements AbstractFactory{ @Override //AMD cpu public CpuAPI createCPU() { return new AMDCpu(939); } //微星主板 @Override public MainBoardAPI createMainBoardAPI() { return new MSIMainboard(939); } }
Client
package 设计模式.abstractFactory;/* *2016年9月2日 上午10:39:15 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public class Engineer { AbstractFactory schemal; public Engineer(AbstractFactory schemal) { this.schemal = schemal; } public void setSchemal(AbstractFactory schemal) { this.schemal = schemal; } public void makeAndUseComputer(){ CpuAPI cpu=schemal.createCPU(); MainBoardAPI mainBoard=schemal.createMainBoardAPI(); cpu.calculate(); mainBoard.install(); }}
package 设计模式.abstractFactory;import static org.junit.Assert.*;import java.nio.channels.NonWritableChannelException;import javax.swing.border.AbstractBorder;import org.junit.Test;/* *2016年9月2日 上午10:35:51 *@Author Pin-Wang *@E-mail 1228935432@qq.com*/public class Client { @Test public void test() { System.out.println("装机方案A"); //装机模式1 AbstractFactory schemalA=new ConcreteFactoryA(); Engineer engineer=new Engineer(schemalA); engineer.makeAndUseComputer(); System.out.println("装机方案B"); //装机模式2 AbstractFactory schemalB=new ConcreteFactoryB(); engineer.setSchemal(schemalB); engineer.makeAndUseComputer(); }}
output:
装机方案AIntell cpu 正在计算.....pins:1156技嘉主板正在安装.....pin数:1156装机方案BAMD cpu 正在计算.....pins:939微星主板正在安装.....pin数:939
本文出自
欢迎与广大coder交流技术
QQ:1228935432 WX:WX1228935432