本系列持续更新,敬请关注。git
静态工厂介绍:github
静态工厂模式能够实现接口封装隔离的原则。在客户端只知接口而不知实现的时候能够使用静态工厂模式。
源码请点击我设计模式
角色:ide
Product:客户端须要使用的接口。 ConcreteProduct:Product的具体实现。 Factory:拥有静态方法的工厂类,返回ConcreteProduct实例。 Client:只知到Product。可是并不知道具体实现。
UML:this
code:.net
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(); } }
AbstractFactory介绍:设计
AbstractFactory是为一系列相关的或者相互依赖的类建立接口,客户端不用关注他们的实现。至关如一个AbstractFactory的实现建立一个产品族。
AbstractFactory角色:code
abstractProduct:抽象产品类。 ConcreteProduct:具体的产品实现。 abstractFactory:抽象工厂。 ConcreteFactory:具体的工厂实现。
UML:
blog
场景:选用不一样的方案来装机,主要是让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:
装机方案A Intell cpu 正在计算.....pins:1156 技嘉主板正在安装.....pin数:1156 装机方案B AMD cpu 正在计算.....pins:939 微星主板正在安装.....pin数:939
欢迎与广大coder交流技术
QQ:1228935432
WX:WX1228935432