flash网站欣赏,安徽网络推广推广机构,蓝一互动网站建设,网站建设简介联系方式1.概念
工厂方法模式只能生产一个产品系列#xff0c;抽象工厂可以生产多个产品系列
2.作用
多个具体产品组成一个产品族#xff08;产品系列#xff09;#xff0c;一个具体工厂负责生产一个产品族
3.应用场景
系统所需产品间由依赖关系#xff0c;可以划分为同一产…1.概念
工厂方法模式只能生产一个产品系列抽象工厂可以生产多个产品系列
2.作用
多个具体产品组成一个产品族产品系列一个具体工厂负责生产一个产品族
3.应用场景
系统所需产品间由依赖关系可以划分为同一产品族时 需要动态的切换产品族
4.特点
分离接口和实现客户端通过抽象接口与具体实现分离从而降低了客户端与具体产品类之间的耦合。封装产品族抽象工厂模式不仅封装了单个产品的创建还封装了产品族即一组相关或相互依赖的产品的创建。易于切换产品族由于客户端是通过抽象接口与产品族交互的因此可以轻松地在不同的产品族之间进行切换而无需修改客户端代码。支持扩展新增产品族时只需新增相应的具体工厂类和产品类无需修改现有代码符合开闭原则
5.类与对象关系 6.实现
// 抽象产品接口按钮
interface Button {void render();
}// 抽象产品接口文本框
interface TextField {void display();
}// 具体产品类Windows风格的按钮
class WindowsButton implements Button {Overridepublic void render() {System.out.println(Rendering a Windows-style button.);}
}// 具体产品类Windows风格的文本框
class WindowsTextField implements TextField {Overridepublic void display() {System.out.println(Displaying a Windows-style text field.);}
}// 具体产品类Mac风格的按钮
class MacButton implements Button {Overridepublic void render() {System.out.println(Rendering a Mac-style button.);}
}// 具体产品类Mac风格的文本框
class MacTextField implements TextField {Overridepublic void display() {System.out.println(Displaying a Mac-style text field.);}
}// 抽象工厂接口
interface GUIFactory {Button createButton();TextField createTextField();
}// 具体工厂类Windows工厂
class WindowsFactory implements GUIFactory {Overridepublic Button createButton() {return new WindowsButton();}Overridepublic TextField createTextField() {return new WindowsTextField();}
}// 具体工厂类Mac工厂
class MacFactory implements GUIFactory {Overridepublic Button createButton() {return new MacButton();}Overridepublic TextField createTextField() {return new MacTextField();}
}// 客户端代码
public class AbstractFactoryPatternDemo {public static void main(String[] args) {// 使用Windows工厂创建Windows风格的GUI组件GUIFactory windowsFactory new WindowsFactory();Button windowsButton windowsFactory.createButton();TextField windowsTextField windowsFactory.createTextField();windowsButton.render();windowsTextField.display();// 使用Mac工厂创建Mac风格的GUI组件GUIFactory macFactory new MacFactory();Button macButton macFactory.createButton();TextField macTextField macFactory.createTextField();macButton.render();macTextField.display();}
}