一、简单工厂模式
简单工厂模式包含3个部分:1.抽象产品角色2.具体产品角色3.具体工厂角色
举个列子来说明一下:
生产一批鼠标,而鼠标又包含很多品牌,比如MouseA、MouseB
public interface Mouse {
//
}
public class MouseA implements Mouse{
public MouseA(){
System.out.println("生产MouseA");
}
}
public class MouseB implements Mouse{
public MouseB(){
System.out.println("生产MouseB");
}
}
具体工厂角色:
public class MouseFactory {
public static Mouse createMouse(String brand){
if (brand.equals("a")) {
return new MouseA();
}else{
return new MouseB();
}
}
}
测试类:
public class TestComputer {
public static void main(String[] args) {
MouseFactory.createMouse("a");
}
}
控制台输出:
生产MouseA
这种模式,如果以后要添加MouseC、MouseD...需要修改MouseFactory 类的createMouse()方法
二、工厂方法模式
工厂方法模式包含4个部分:1.抽象产品角色2.具体产品角色3.抽象工厂角色4.具体工厂角色
举个列子,还是生产一批鼠标:
public interface Mouse {
//
}
public class MouseA implements Mouse{
public MouseA(){
System.out.println("生产MouseA");
}
}
public class MouseB implements Mouse{
public MouseB(){
System.out.println("生产MouseB");
}
}
抽象工厂角色:
public interface AbstractFactory {
public Mouse createMouse();
}
具体工厂角色:
public class MouseAFactory implements AbstractFactory{
public Mouse createMouse() {
return new MouseA();
}
}
测试代码:
public class TestComputer {
public static void main(String[] args) {
AbstractFactory factory = new MouseAFactory();
factory.createMouse();
}
}
控制台输出:
生产MouseA
三、抽象工厂模式
抽象工厂模式也包含4个部分:1.抽象产品角色2.具体产品角色3.抽象工厂角色4.具体工厂角色
一个抽象工厂角色(Computer)有多个具体工厂角色(Computer1、Computer2等等),一个具体工厂角色(Computer1)可以创建多个具体产品对象(MouseA和MonitorA)。
举个列子来说明一下:
一台计算机工作需要的对象1.鼠标(方法:点击鼠标)2.显示屏(方法:显示画面)(计算机工作包括很多了,这里就只说鼠标和显示屏了)
而鼠标和显示屏又都有好多种品牌,比如A品牌的鼠标,B品牌的鼠标,A品牌的显示器,B品牌的显示器。
到现在,我们需要6个实体类了。分别是接口Mouse、实现类MouseA、实现类MouseB和接口Monitor、实现类MonitorA、实现类MonitorB
也就是抽象产品角色Mouse、Monitor。具体产品角色MouseA、MouseB、MonitorA、MonitorB。
代码很简单,如下:
public interface Mouse {
public void click();
}
public class MouseA implements Mouse{
public void click() {
System.out.println("点击A品牌的鼠标");
}
}
public class MouseB implements Mouse{
public void click() {
System.out.println("点击B品牌的鼠标");
}
}
public interface Monitor {
public void show();
}
public class MonitorA implements Monitor{
public void show() {
System.out.println("使用A品牌的显示屏来显示画面");
}
}
public class MonitorB implements Monitor{
public void show() {
System.out.println("使用B品牌的显示屏来显示画面");
}
}
一台计算机工作的话需要有鼠标和显示屏(这里直说鼠标和显示屏),需要获得鼠标和显示屏对象。而我们知道市场上的计算机的型号太多了,一台计算机可能配置的是
1.A鼠标A显示屏
2.B鼠标B显示屏
3.A鼠标B显示屏
4.B鼠标A显示屏
...等等,还有很多我们没有列出来的其他品牌的鼠标和显示屏。
我们需要有一个接口(抽象工厂角色)来创建鼠标和显示屏对象,然后通过这个接口的实现类(具体工厂角色)来创建具体的鼠标和显示屏。
代码如下:
public interface Computer {
public Mouse createMouse();
public Monitor createMonitor();
}
public class Computer1 implements Computer{
//computer1这台计算机配置的是MouseA和MonitorA
public Mouse createMouse() {
return new MouseA();
}
public Monitor createMonitor() {
return new MonitorA();
}
}
//计算机肯定不止computer1这一个型号了,还有很多,只要实现Computer接口,在方法的实现中返回具体的鼠标和显示屏就可以了。
测试一下代码:
public class TestComputer {
public static void main(String[] args) {
Computer c = new Computer1();
c.createMouse().click();
c.createMonitor().show();
}
}
控制台输出:
使用A品牌的显示屏来显示画面
点击A品牌的鼠标
以上是我自己这两天学习的理解,如有错误,欢迎大家指正。
1739

被折叠的 条评论
为什么被折叠?



