当前位置: 首页 > wzjs >正文

德州企业网站建设psd模板免费下载网站

德州企业网站建设,psd模板免费下载网站,东莞有什么比较好的网站公司,家装公司哪家好工厂模式:比萨店的秘密武器,轻松搞定对象创建! 大家好,今天我们来聊聊设计模式中的工厂模式。如果你曾经为对象的创建感到头疼,或者觉得代码中到处都是 new 关键字,那么工厂模式就是你的救星!本…

工厂模式:比萨店的秘密武器,轻松搞定对象创建!

大家好,今天我们来聊聊设计模式中的工厂模式。如果你曾经为对象的创建感到头疼,或者觉得代码中到处都是 new 关键字,那么工厂模式就是你的救星!本文基于《Head First 设计模式》的工厂模式章节,带你从比萨店的故事中轻松掌握工厂模式的精髓,附上 Java 代码示例,让你彻底理解并爱上它!
在这里插入图片描述


1. 简单工厂模式:比萨店的起步

故事背景

小明开了一家比萨店,刚开始只有两种比萨:芝士比萨素食比萨。每次接到订单,小明都会根据客户的需求,手动创建对应的比萨对象。

问题出现

随着生意越来越好,比萨的种类也越来越多。小明发现,每次新增一种比萨,都需要修改订单处理的代码。这不仅麻烦,还容易出错。

解决方案:简单工厂模式

小明决定引入简单工厂模式,将比萨的创建逻辑集中到一个工厂类中。这样,无论比萨种类如何变化,订单处理的代码都不需要修改。

代码实现

// 比萨接口
interface Pizza {void prepare();void bake();
}// 具体比萨:芝士比萨
class CheesePizza implements Pizza {@Overridepublic void prepare() {System.out.println("Preparing Cheese Pizza");}@Overridepublic void bake() {System.out.println("Baking Cheese Pizza");}
}// 具体比萨:素食比萨
class VeggiePizza implements Pizza {@Overridepublic void prepare() {System.out.println("Preparing Veggie Pizza");}@Overridepublic void bake() {System.out.println("Baking Veggie Pizza");}
}// 简单工厂
class SimplePizzaFactory {public Pizza createPizza(String pizzaType) {if (pizzaType.equals("cheese")) {return new CheesePizza();} else if (pizzaType.equals("veggie")) {return new VeggiePizza();} else {throw new IllegalArgumentException("Unknown pizza type");}}
}// 客户端代码
public class PizzaStore {public static void main(String[] args) {SimplePizzaFactory factory = new SimplePizzaFactory();Pizza pizza = factory.createPizza("cheese");pizza.prepare(); // 输出: Preparing Cheese Pizzapizza.bake();    // 输出: Baking Cheese Pizza}
}

优点

  • 将对象的创建逻辑集中在一个类中,便于维护。
  • 客户端与具体产品解耦。

缺点

  • 违反“开闭原则”,新增产品时需要修改工厂类。

2. 工厂方法模式:扩展比萨帝国

故事背景

小明的比萨店越做越大,他决定开分店!每个分店都有自己的特色比萨,比如纽约风味芝士比萨芝加哥风味素食比萨

问题出现

如果继续使用简单工厂模式,每次新增分店都需要修改工厂类,这显然不够灵活。

解决方案:工厂方法模式

小明决定采用工厂方法模式,将比萨的创建延迟到子类。每个分店都可以实现自己的比萨创建逻辑。

代码实现

// 比萨接口
interface Pizza {void prepare();void bake();
}// 具体比萨:纽约风味芝士比萨
class NYCheesePizza implements Pizza {@Overridepublic void prepare() {System.out.println("Preparing NY Style Cheese Pizza");}@Overridepublic void bake() {System.out.println("Baking NY Style Cheese Pizza");}
}// 具体比萨:芝加哥风味素食比萨
class ChicagoVeggiePizza implements Pizza {@Overridepublic void prepare() {System.out.println("Preparing Chicago Style Veggie Pizza");}@Overridepublic void bake() {System.out.println("Baking Chicago Style Veggie Pizza");}
}// 工厂接口
abstract class PizzaStore {public Pizza orderPizza(String type) {Pizza pizza = createPizza(type);pizza.prepare();pizza.bake();return pizza;}// 工厂方法protected abstract Pizza createPizza(String type);
}// 具体工厂:纽约比萨店
class NYPizzaStore extends PizzaStore {@Overrideprotected Pizza createPizza(String type) {if (type.equals("cheese")) {return new NYCheesePizza();} else {throw new IllegalArgumentException("Unknown pizza type");}}
}// 具体工厂:芝加哥比萨店
class ChicagoPizzaStore extends PizzaStore {@Overrideprotected Pizza createPizza(String type) {if (type.equals("veggie")) {return new ChicagoVeggiePizza();} else {throw new IllegalArgumentException("Unknown pizza type");}}
}// 客户端代码
public class PizzaTest {public static void main(String[] args) {PizzaStore nyStore = new NYPizzaStore();Pizza pizza = nyStore.orderPizza("cheese"); // 输出: Preparing NY Style Cheese Pizza, Baking NY Style Cheese PizzaPizzaStore chicagoStore = new ChicagoPizzaStore();pizza = chicagoStore.orderPizza("veggie"); // 输出: Preparing Chicago Style Veggie Pizza, Baking Chicago Style Veggie Pizza}
}

优点

  • 符合“开闭原则”,新增产品时只需扩展子类。
  • 将对象的创建逻辑分散到子类,降低了耦合度。

缺点

  • 类的数量会增加,系统复杂度提高。

3. 抽象工厂模式:比萨与饮料的完美搭配

故事背景

小明发现,客户不仅喜欢比萨,还喜欢搭配饮料。于是,他决定推出套餐,每个套餐包含一款比萨和一款饮料。

问题出现

如果使用工厂方法模式,比萨和饮料的创建逻辑会分散在不同的工厂中,难以保证它们之间的兼容性。

解决方案:抽象工厂模式

小明决定采用抽象工厂模式,将比萨和饮料的创建逻辑集中到一个工厂中,确保每个套餐的比萨和饮料是兼容的。

代码实现

// 比萨接口
interface Pizza {void prepare();
}// 饮料接口
interface Drink {void serve();
}// 具体比萨:纽约风味芝士比萨
class NYCheesePizza implements Pizza {@Overridepublic void prepare() {System.out.println("Preparing NY Style Cheese Pizza");}
}// 具体饮料:纽约风味可乐
class NYCoke implements Drink {@Overridepublic void serve() {System.out.println("Serving NY Style Coke");}
}// 具体比萨:芝加哥风味素食比萨
class ChicagoVeggiePizza implements Pizza {@Overridepublic void prepare() {System.out.println("Preparing Chicago Style Veggie Pizza");}
}// 具体饮料:芝加哥风味雪碧
class ChicagoSprite implements Drink {@Overridepublic void serve() {System.out.println("Serving Chicago Style Sprite");}
}// 抽象工厂接口
interface MealFactory {Pizza createPizza();Drink createDrink();
}// 具体工厂:纽约风味套餐
class NYMealFactory implements MealFactory {@Overridepublic Pizza createPizza() {return new NYCheesePizza();}@Overridepublic Drink createDrink() {return new NYCoke();}
}// 具体工厂:芝加哥风味套餐
class ChicagoMealFactory implements MealFactory {@Overridepublic Pizza createPizza() {return new ChicagoVeggiePizza();}@Overridepublic Drink createDrink() {return new ChicagoSprite();}
}// 客户端代码
public class MealTest {public static void main(String[] args) {MealFactory nyFactory = new NYMealFactory();Pizza pizza = nyFactory.createPizza();Drink drink = nyFactory.createDrink();pizza.prepare(); // 输出: Preparing NY Style Cheese Pizzadrink.serve();   // 输出: Serving NY Style CokeMealFactory chicagoFactory = new ChicagoMealFactory();pizza = chicagoFactory.createPizza();drink = chicagoFactory.createDrink();pizza.prepare(); // 输出: Preparing Chicago Style Veggie Pizzadrink.serve();   // 输出: Serving Chicago Style Sprite}
}

优点

  • 可以创建一组相关的对象,保证它们之间的兼容性。
  • 符合“开闭原则”,新增产品族时只需扩展工厂类。

缺点

  • 类的数量会大幅增加,系统复杂度提高。

总结

工厂模式的核心思想是将对象的创建与使用分离,从而使得系统更加灵活和可维护。三种工厂模式各有优缺点:

  • 简单工厂模式:适合创建逻辑简单的场景,但违反“开闭原则”。
  • 工厂方法模式:通过子类实现对象的创建,符合“开闭原则”,但会增加类的数量。
  • 抽象工厂模式:适合创建一组相关对象的场景,但系统复杂度较高。

在实际开发中,应根据具体需求选择合适的工厂模式,以达到代码的高内聚、低耦合。希望本文能帮助你更好地理解工厂模式,并在项目中灵活运用!


互动话题
你在项目中用过工厂模式吗?遇到过哪些问题?欢迎在评论区分享你的经验!


文章转载自:

http://2PDx1uuY.Lnrhk.cn
http://RNg3k6TA.Lnrhk.cn
http://YwE8j9xk.Lnrhk.cn
http://n20ZQB75.Lnrhk.cn
http://IZ9p9OER.Lnrhk.cn
http://CE25e6VW.Lnrhk.cn
http://KCDY3HZY.Lnrhk.cn
http://1d7LWo1M.Lnrhk.cn
http://mvpfCxU4.Lnrhk.cn
http://uMoxyHkf.Lnrhk.cn
http://jVqic2wE.Lnrhk.cn
http://iKGA3Lyf.Lnrhk.cn
http://Q2WmVeN1.Lnrhk.cn
http://mTsGcMVX.Lnrhk.cn
http://YalojmpE.Lnrhk.cn
http://KFiIUinE.Lnrhk.cn
http://7gXKGUpA.Lnrhk.cn
http://Q6IcDew0.Lnrhk.cn
http://4wVApuV0.Lnrhk.cn
http://Jk4Jv0ud.Lnrhk.cn
http://qGTzryzf.Lnrhk.cn
http://Ena7kxRD.Lnrhk.cn
http://EUASFnwU.Lnrhk.cn
http://F9ejofi2.Lnrhk.cn
http://pqapFISb.Lnrhk.cn
http://ZlCYRDrj.Lnrhk.cn
http://PtxIzwi7.Lnrhk.cn
http://BBa6puhl.Lnrhk.cn
http://SJ7eBG6m.Lnrhk.cn
http://edyyg0Xf.Lnrhk.cn
http://www.dtcms.com/wzjs/752045.html

相关文章:

  • 安徽省住建厅网站建设深圳企业网站建设制作公司
  • 郴州市北湖建设局网站唐山网站建设系统
  • 网站搬迁计算机前端培训
  • 站长统计幸福宝宝官方php 网站管理系统
  • 网站单页别人是怎么做的具体的网站建设方案
  • 中国十大网站建设公司排名免费建网站平台教
  • 网站分享正能量旅游网站建设代码
  • 永康市网站建设网站信息优化的方式
  • ui设计和网站开发温州市住房和城乡建设局
  • 网页制作作品免费下载连云港网站优化方案
  • 微商城 网站制作网站 语言切换怎么做
  • 集团网站怎么建设做仪表宣传哪个网站好
  • 建设网站过时免费虚拟主机的好处
  • 我的网站织梦最珠海app下载官方
  • jsp购物网站开发 论文罗湖区住房和建设局官网
  • 三亚网站制老版51个人空间找照片
  • 设计案例的网站品牌网站建设市场分析
  • 做青蛙网站廊坊北京网站建设
  • 可以做网站的编程有什么网站绑定公众号
  • 视频网站logo怎么做广州门户网站建设公司
  • 建设茶网站发布与推广方案网页设计的基本结构
  • 淘宝网站开发技术名称免费开发游戏的软件
  • 宠物网站建设策划方案博客用来做微网站
  • 苏州外贸网站建设优化推广中国最近战争新闻
  • 30岁女人学网站开发可以吗用wordpress会被告吗
  • 大同市住房城乡建设网站asp网站开发实例
  • 兰州模板型网站建设学软件工程培训就业机构
  • 印度做杂质的网站冷饮网站开发背景意义
  • 企业网站管理系统程序名称网上商城图片
  • 做视频网站需要什么高端技术沈北新区建设局网站