工厂模式类图相关知识
-
设计模式之工厂模式与工厂方法模式工厂模式类图设计模式之工厂模式与工厂方法模式简单工厂模式代码package pattern.factory;/** * @ClassName IShape * @Description TODO:描述该接口职责 * @Author ckmike * @Date 18-12-14 上午11:33 * @Version 1.0 * @Copyright ckmike **/public interface IShape { void draw(); double area();}package pattern.factory;/** * Circle 简要描述 * <p> TODO:描述该类职责 </p> * * @author ckmike * @version 1.0 * @date 18-12-14 上午11:34 * @copyright ckmike **/public class Circle implements IShape { private doub
-
Java设计模式——工厂类模式1、工厂方法模式(Factory Method) 工厂方法模式分为三种: 1.1、普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图: 举例如下:(我们举一个发送邮件和短信的例子) 首先,创建二者的共同接口: public interface Sender { public void Send(); } 其次,创建实现类: public class MailSender implements Sender { @Override public void Send() { System.out.println("this is mailsender!"); } } public class
-
工厂模式首先,简单工厂模式不属于23中涉及模式,简单工厂一般分为:普通简单工厂、多方法简单工厂、静态方法简单工厂。A、简单工厂模式简单工厂模式模式分为三种:A1、普通就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图:[图片上传失败...(image-13f411-1537173544176)]举例如下:(我们举一个发送邮件和短信的例子)首先,创建二者的共同接口:public interface Sender { public void Send(); }其次,创建实现类:public class MailSender implements Sender { @Override public void Send() { &nb
-
工厂模式工厂方法类图 抽象工厂类图 工厂方法 VS 抽象工厂 工厂方法提供一个抽象接口,用来创建“一个产品”。由每个子类来决定实例化哪个具体类。 抽象工厂提供一个抽象接口,用来创建一个产品家族 说明:文中内容为笔者在慕课网学习时的笔记,具体课程链接为Java设计模式精讲 以上内容如有侵权,请联系笔者删除
工厂模式类图相关课程
工厂模式类图相关教程
- 工厂模式 工厂模式是平时开发过程中最常见的设计模式。工厂模式解决类的实例化问题,它属于创建型模式。工厂模式也经常会和其他设计模式组合使用。试想你去麦当劳买一个汉堡。你只需要告诉收银员要一个xx汉堡。过一会就会有一个此类型的汉堡被制作出来。而你完全不需要知道这个汉堡是怎么被制作出来的。这个例子中你就是客户端代码,麦当劳就是工厂,负责生产汉堡。汉堡是接口,而具体的某一种汉堡,比如说香辣鸡腿堡,就是实现了汉堡接口的类。我们继续通过另外一个例子,深入理解工厂模式。现在我们给某款音乐软件开发一个推荐功能。需求是能够根据用户选择的音乐风格,推荐不同风格的歌曲清单。那么你打算怎么实现呢?
- 抽象工厂模式 抽象工厂模式用来解决产品族的实例化问题。比如说现在有个家居设计软件,通过软件模拟房间,摆放各种虚拟的家具,看效果如何。我们可以放入电视柜、茶几、餐桌、床等等。这一系列的家具就叫做产品族。产品族面临的问题是,当一个产品族切换到另外一个产品族时,如何让代码的修改最小。也就是说如何做到开闭原则。想把设计好的方案从简约现代切换到欧式风格家具,怎么才能做到修改最小?如果采用简单工厂,那么每种产品都对应一个工厂,工厂负责产出不同风格的产品。设计方案中用到 n 种产品就要修改 n 处代码。这显然不是最佳的方法。此时,我们需要抽象工厂模式来解决这个问题。抽象工厂模式中,每个工厂的实现负责生产自己产品族的产品。示意图如下:
- 1.1 工厂模式实现电子地图 首先我们需要一个策略接口,不同策略实现该接口。再搭配一个策略工厂。客户端代码只需要根据用户的出行方式,让工厂返回具体实现即可,由具体的实现来提供算法计算。以工厂模式实现的电子地图代码如下。TravelStrategy接口代码:public interface TravelStrategy { int calculateMinCost();}TravelStrategy接口的实现代码:public class SelfDrivingStrategy implements TravelStrategy { @Override public int calculateMinCost() { return 30; }}TravelStrategyFactory代码:public class TravelStrategyFactory { public TravelStrategy createTravelStrategy(String travelWay) { if ("selfDriving".equals(travelWay)) { return new SelfDrivingStrategy(); } if ("bicycle".equals(travelWay)) { return new BicycleStrategy(); } else { return new PublicTransportStrategy(); } }}TravelService对外提供计算方法,通过工厂生成所需要的 strategy。代码如下:public class TravelService { private TravelStrategyFactory travelStrategyFactory = new TravelStrategyFactory(); public int calculateMinCost(String travelWay) { TravelStrategy travelStrategy = travelStrategyFactory.createTravelStrategy(travelWay); return travelStrategy.calculateMinCost(); }}代码结构和我们上一节讲解的音乐推荐器几乎一模一样。看似也很好地解决了我们的设计问题。接下来我们看看如何用策略模式解决这个问题,然后我们再对两种模式做对比。
- 3. 策略模式与工厂模式结合使用 针对第一个缺点。我们可以通过策略模式与工厂模式结合使用来改进。通过进一步封装,消除客户端代码的条件选择。我们修改一下StrategyContext类,代码如下:public class StrategyContext { private TravelStrategy strategy; public StrategyContext(String travelWay) { if ("selfDriving".equals(travelWay)) { strategy = new SelfDrivingStrategy(); } if ("bicycle".equals(travelWay)) { strategy = new BicycleStrategy(); } else { strategy = new PublicTransportStrategy(); } } public int calculateMinCost(){ return strategy.calculateMinCost(); }}可以看到我们初始化的逻辑和工厂的逻辑很相似。这样条件判断就提炼到 Context 类中了。而客户端代码将会简洁很多,只需要在初始化 StrategyContext 时,传入相应的出行方式即可。代码如下:public class TravelService { private StrategyContext strategyContext; public int calculateMinCost(String travelWay){ strategyContext = new StrategyContext(travelWay); return strategyContext.calculateMinCost(); }}改进后,客户端代码现在已经完全不知道策略对象的存在了。条件判断也被消除了。其实很多时候我们都是通过搭配不同设计模式来达到我们的设计目标的。策略+工厂模式类图如下:
- 策略模式 大家一定都使用过电子地图。在地图中输入出发地和目的地,然后再选取你的出行方式,就可以计算出最优线路以及预估的时长。出行方式有驾车、公交、步行、骑行等。出行方式不同,计算的线路和时间当然也不同。其实出行方式换个词就是出行策略。而策略模式就是针对此类问题的设计模式。生活中这种例子太多了,比如购物促销打折的策略、计算税费的策略等等。相应的策略模式也是一种常用的设计模式。本节我们会以电子地图为例,比较工厂模式和策略模式,讲解策略模式的原理。最后结合工厂模式改造策略模式的代码实现,以达到更高的设计目标。
- 1. 实现策略模式 接下来我们就以电子地图为例,讲解如何用策略模式实现。不过先别着急,上一节我们学习了工厂模式,看起来电子地图也可以用工厂模式来实现。所以我们先来看看用工厂模式如何实现。下面的例子为了方便展示,接口入参只有出行方式,省略了出发地和目的地。计算结果是预估时长。
工厂模式类图相关搜索
-
g area
gamma函数
gcc 下载
generic
genymotion
gesture
getattribute
getchar
getdocument
getelementbyid
getelementsbytagname
getmonth
getproperty
gets
getty
git clone
git pull
git push f
git 命令
git 使用