工厂设计模式(3种)
前沿:开闭原则–一个软件实体,应该对扩展开放,对修改关闭(通俗点就是,想改变,就不要改原有的代码,直接新增一个类去实现)
简单工厂模式:
定义:定义一个工厂类,根据不同的参数返回不同的实例
代码实现逻辑:定义一个接口(Mouse,方法sayHi(),),两个鼠标类(HPMouse,DellMouse)实现Mouse接口,在定义一个鼠标工厂(MouseFactory 方法createMouse())
public interface Mouse {
void sayHi();
}
public class DellMouse implements Mouse{
@Override
public void sayHi() {
System.out.println("这里是戴尔鼠标的实现类");
}
}
public class HPMouse implements Mouse{
@Override
public void sayHi() {
System.out.println("这里是惠普鼠标的实现类");
}
}
public interface MouseFactory {
Mouse createMouser();
}
测试方法
public class FactorymethodDemo {
public static void main(String[] args) {
MouseFactory mouseFactory = new HpMouseFactory();
Mouse mouser = mouseFactory.createMouser();
mouser.sayHi();
}
}
UML图
普通工厂模式:
UML类图
定义:只是定义一个抽象工厂类,让它的子类负责生产不同的实例
public interface MouseFactory {
Mouse createMouse();
}
public class DellMouseFactory implements MouseFactory{
public Mouse createMouse() {
return new DellMouse();
}
}
public class HPMouseFactory implements MouseFactory{
public Mouse createMouse() {
return new HPMouse();
}
}
public class TestDemo {
public static void main(String[] args) {
//这里就是定义一个工厂类,让子类决定实现哪个
MouseFactory mouseFactory = new HPMouseFactory();
Mouse mouse = mouseFactory.createMouse();
mouse.sayHi();
}
}
这里是惠普鼠标
抽象工厂模式:
定义:只是普通工厂的变种,多了产品线而已
代码案例:
新增了键盘实体类
public interface KeyBoard {
void sayHello();
}
public class HPKeyBoard implements KeyBoard{
public void sayHello() {
System.out.println("这里是惠普键盘");
}
}
public class DellKeyBoard implements KeyBoard{
public void sayHello() {
System.out.println("这里是戴尔键盘");
}
}
电脑产品线
public interface ComputerFactory {
Mouse getMouse();
KeyBoard getKeyBoard();
}
public class HPComputerFactory implements ComputerFactory{
public Mouse getMouse() {
return new HPMouse();
}
public KeyBoard getKeyBoard() {
return new HPKeyBoard();
}
}
public class DellComputerFactory implements ComputerFactory{
public Mouse getMouse() {
return new DellMouse();
}
public KeyBoard getKeyBoard() {
return new DellKeyBoard();
}
}
测试方法:
public class Demo {
public static void main(String[] args) {
ComputerFactory computerFactory = new HPComputerFactory();
KeyBoard keyBoard = computerFactory.getKeyBoard();
Mouse mouse = computerFactory.getMouse();
mouse.sayHi();
keyBoard.sayHello();
}
}