首页 文章 精选 留言 我的

精选列表

搜索[主动型云蜜罐],共10006篇文章
优秀的个人博客,低调大师

设计模式(六)建造者(创建型)

概念 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 类图 代码 public abstract class Computer { private String type; private String cpu; private String ram; private String os; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getCpu() { return cpu; } public void setCpu(String cpu) { this.cpu = cpu; } public String getRam() { return ram; } public void setRam(String ram) { this.ram = ram; } public String getOs() { return os; } public void setOs(String os) { this.os = os; } } 创建两种型号的计算机: public class T410 extends Computer { private String hardDisk; public T410() { this.setType("ThinkPad T410i"); } public String getHardDisk() { return hardDisk; } public void setHardDisk(String hardDisk) { this.hardDisk = hardDisk; } @Override public String toString() { return "T410 [hardDisk=" + hardDisk + ", getType()=" + getType() + ", getCpu()=" + getCpu() + ", getRam()=" + getRam() + ", getOs()=" + getOs() + ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + "]"; } } public class X201 extends Computer { public X201() { this.setType("Thinkpad X201i"); } @Override public String toString() { return "X201 [getType()=" + getType() + ", getCpu()=" + getCpu() + ", getRam()=" + getRam() + ", getOs()=" + getOs() + ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + "]"; } } 在计算机产品类的基础上增加一个ComputerBuilder接口,以及两个的实现类,以便对计算机进行生产: public interface ComputerBuilder { void buildCpu(); void buildRam(); void buildHardDisk(); void BuildOs(); Computer getResult(); } public class T410Builder implements ComputerBuilder { private T410 computer = new T410(); @Override public void buildCpu() { computer.setCpu("i5"); } @Override public void buildRam() { computer.setRam("4G"); } @Override public void buildHardDisk() { computer.setHardDisk("500G"); } @Override public void BuildOs() { computer.setOs("Win7"); } @Override public Computer getResult() { return computer; } } public class X201Builder implements ComputerBuilder { private X201 computer = new X201(); @Override public void buildCpu() { computer.setCpu("i7"); } @Override public void buildRam() { computer.setRam("8G"); } @Override public void buildHardDisk() { //没有HaedDisk } @Override public void BuildOs() { computer.setOs("Win8"); } @Override public Computer getResult() { return computer; } } 再鞥家导演者: public class ComputerDirector { ComputerBuilder builder; public T410 constructT410() { builder = new T410Builder(); builder.buildCpu(); builder.buildHardDisk(); builder.BuildOs(); builder.buildRam(); return (T410) builder.getResult(); } public X201 constructX201() { builder = new X201Builder(); builder.buildCpu(); builder.buildHardDisk(); builder.BuildOs(); builder.buildRam(); return (X201) builder.getResult(); } } 测试: public class ComputerTest { public static void main(String[] args) { ComputerDirector director = new ComputerDirector(); Computer t410 = director.constructT410(); System.out.println(t410); System.out.println("-------------------------"); Computer x201 = director.constructX201(); System.out.println(x201); } } 与抽象工厂的区别 在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。即建造模式可以强制实行一种分步骤进行的建造过程。 建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3856359.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

设计模式(三)模版方法(行为型)

模板方法模式:定义一个算法的执行骨架,将具体的算法实现延迟到子类完成。 模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步骤的方法称做基本方法(primitive method);而将这些基本方法汇总起来的方法叫做模板方法(template method),这个设计模式的名字就是从此而来。 举个例子: 在现实生活中,很多事情都包含几个实现步骤,例如请客吃饭,无论吃什么,一般都包含点单、吃东西、买单等几个步骤,通常情况下这几个步骤的次序是:点单 --> 吃东西 --> 买单。在这三个步骤中,点单和买单大同小异,最大的区别在于第二步——吃什么?吃面条和吃满汉全席可大不相同。 代码说明一切 这里,代码以一个看模版方法用了多少时间的例子来说明一下: package com.yydcdut.java2; public abstract class GetTime { public void getTime() { long time1 = System.currentTimeMillis(); this.doSomething(); long time2 = System.currentTimeMillis(); System.out.println("耗时:"+(time2-time1)); } public abstract void doSomething(); } package com.yydcdut.java2; public class Demo extends GetTime { @Override public void doSomething() { for(int i=0;i<10000;i++) System.out.println(""+i); } } package com.yydcdut.java2; public class Main { public static void main(String[] args) { GetTime gt = new Demo(); gt.getTime(); } } 总结 模板方法模式:抽象的骨架类,具体的实现类。 优点:使用模板方法模式,在定义算法骨架的时候,可以灵活的实现具体的算法。满足用户多变的需求。 缺点:假如算法骨架有改动,就需要修改抽象类,那么,具体的实现类,也会跟着修改。 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3842819.html,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册