篮球的简单工厂你模式—-设计模式
简单设计模式,并不属于23种设计模式,因为它并不符合开闭原则,但是这是一种设计模式,也是最简单的一种设计模式。(代码的形式主要是一java的方式去实现,个人比较喜欢java,欢迎吐槽!)
结构与角色:
简单工厂模式的实质是由一个工厂类根据外面或客户端之类的传一个参数过来,动态的决定创建哪一个产品类的实例,前提的是这些产品的类只能是继承一个父类或接口。
Factory :工厂。简单工厂模式的核心,负责实现创建所有实例的内部逻辑。主要是用去被客户端或者是controller之类的调用。(下面代码是用类(Brain)来实现)
Product:抽象产品。简单工厂模式所创建所有实例的父类,它负责主要是所有实例参数公共的接口。(下面主要是以接口ShotTechnology实现)
ConcreteProduct:具体产品。简单工厂模式的创建目标,所有创建的对象都是充当这份角色的某个具体类的实例。(下面主要是以类JumpShot实现)
情况
家兴是一个会打篮球的IT屌丝男,他虽然射球不准,但是他会几种的射球技术,如上篮,跳投,干拔(很烂)
**简单工厂的XML图**
public interface ShotTechnology{
}
class JumpShot implements ShotTechnology{
public JumpShot(){
System.out.println("我家兴要跳投了!");
}
}
class DryPick implements ShotTechnology{
public DryPick(){
System.out.println("我家兴要干拔了!");
}
}
class Brain{
public static ShotTechnology brain(String shotTechnology){
if(shotTechnology.equals("jumpShot")){
return new JumpShot();
}else if(shotTechnology.equals("dryPick")){
return new DryPick();
}else
throw new RuntimeException("我家兴根本不会这招,我要返去训啦!");
}
}
class Client{
public static void main(String[] args){
ShotTechnology Technology1,Technology2;
Technology1= Brain.brain("jumpShot");
Technology2= Brain.brain("dryPick");
}
简单工厂模式优点:简单工厂模式实现业务逻辑与界面逻辑分开,可以让程序的耦合度减低,需要添加新的技能就直接继承接口,在工厂种逻辑调用
缺点是违反了开闭原则,添加代码可能导致程序造成影响