首页 > 其他分享 >设计模式

设计模式

时间:2024-10-10 22:44:53浏览次数:9  
标签:搜狗 输入法 皮肤 模式 display 设计模式 public

重点:单例模式、工厂方法模式、建造者模式、适配器模式(类/对象)、代理模式、装饰器模式、迭代器模式、模板方法模式、策略模式、责任链模式、观察者模式

1、设计模式的分类

创建型模式

  用于描述“怎么样创建对象”,它的主要特征是“将对象的创建与使用分离”。GOF书中提到了单例、原型、工厂方法、抽象工厂、建造者等5种创建型模式。

结构型模式

  用于描述如何将类或对象按某种布局组成更大的机构,GOF书中提到了代理、适配器、桥接、装饰、外观、享元、组合等7种结构型模式。

行为模式

  用于描述类或对象怎么样相互协作共同完成单个对象无法单独完成的任务,以及怎么样分配职责。GOF书中提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等11种行为模式。

2、软件设计原则

  在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。

开闭原则

  对扩展开放,对修改关闭。在程序需要进行扩展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。

  想要达到这样的效果,我们要使用接口和抽象类。

  因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以了。 

 1 package com.itheima.principles.demo1;
 2 
 3 /**
 4  * 设计原则:开闭原则
 5  * 案例:搜狗输入法皮肤案例 抽象皮肤类
 6  */
 7 public abstract class AbstractSkin {
 8 
 9     /**
10      * 显示皮肤抽象方法
11      */
12     public abstract void display();
13 }
 1 package com.itheima.principles.demo1;
 2 
 3 /**
 4  * 设计原则:开闭原则
 5  * 案例:搜狗输入法皮肤案例 默认皮肤类
 6  */
 7 public class DefaultSkin extends AbstractSkin {
 8     @Override
 9     public void display() {
10         System.out.println("默认皮肤");
11     }
12 }
 1 package com.itheima.principles.demo1;
 2 
 3 /**
 4  * 设计原则:开闭原则
 5  * 案例:搜狗输入法皮肤案例 黑马皮肤类
 6  */
 7 public class HeimaSkin extends AbstractSkin {
 8     @Override
 9     public void display() {
10         System.out.println("黑马皮肤");
11     }
12 }
 1 package com.itheima.principles.demo1;
 2 
 3 /**
 4  * 设计原则:开闭原则
 5  * 案例:搜狗输入法皮肤案例 搜狗输入法类
 6  */
 7 public class SougouInput {
 8     private AbstractSkin skin;
 9 
10     public void setSkin(AbstractSkin skin) {
11         this.skin = skin;
12     }
13 
14     public void display() {
15         skin.display();
16     }
17 }
 1 package com.itheima.principles.demo1;
 2 
 3 /**
 4  * 测试类
 5  */
 6 public class Client {
 7     public static void main(String[] args) {
 8         // 1 创建搜狗输入法对象
 9         SougouInput sougouInput = new SougouInput();
10         // 2 创建默认皮肤对象
11         DefaultSkin defaultSkin = new DefaultSkin();
12         // 3 设置默认皮肤到输入法
13         sougouInput.setSkin(defaultSkin);
14         // 4 展示皮肤
15         sougouInput.display();
16 
17         // 设置黑马皮肤并展示
18         HeimaSkin heimaSkin = new HeimaSkin();
19         sougouInput.setSkin(heimaSkin);
20         sougouInput.display();
21     }
22 }

以上代码搜狗皮肤案例实现了开闭原则,定义了抽象皮肤类,让特定皮肤类(默认皮肤、黑马皮肤)继承抽象皮肤类,去实现特定的皮肤功能,在搜狗输入法使用时,只需要设置具体的皮肤给输入法就可以实现换肤,不用修改原来的代码,并且自己设计一个皮肤时,只需要重新定义一个类即可,方便扩展,在使用时实现了热插拔。

 

标签:搜狗,输入法,皮肤,模式,display,设计模式,public
From: https://www.cnblogs.com/record-100/p/18457355

相关文章

  • 前端开发设计模式——组合模式
    目录一、组合模式的定义和特点1.定义2.特点:二、组合模式的实现方式1.定义抽象组件类2.创建叶节点类3.创建组合类:三、组合模式的应用场景1.界面布局管理2.菜单系统构建3.组件库开发四、组合模式的优点1.简化客户端代码2.增强代码的可拓展性3.清晰的层次结构表示......
  • 重修设计模式-行为型-观察者模式
    重修设计模式-行为型-观察者模式Defineaone-to-manydependencybetweenobjectssothatwhenoneobjectchangesstate,allitsdependentsarenotifiedandupdatedautomatically.在对象之间订阅一个一对多的依赖,当一个对象状态改变时,它的所有依赖对象都会自动......
  • C++常用设计模式详解
    前言:本文详细解释几种常用的C++设计模式,都是平时项目中用的比较多的。本文针对每种设计模式都给出了示例,让你跟着代码彻底搞懂设计模式。Tips:如果是准备面试,不需要知道所有的设计模式,要深入理解下面几种常用即可,因为面试官会先问你了解哪些设计模式,然后从你了解的里面挑一......
  • php设计模式(二)结构
    适配器模式(Adapter):结合两个不兼容的接口。GoF定义:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作<?phpclassmessage{publicfunctionsend(){echo'faxiaoix';}publicfunctio......
  • php设计模式(一)创建
    1、创建单例模式:确保一个类只有一个实例,并提供一个全局访问点。使用static静态变量和静态类工厂模式:主要是把工厂抽象出来一个抽象类,子类继承,通过子类构建,调用抽象工厂模式:抽象工厂模式的核心就是共创抽象类不止一个子类的构建,比如,我要发消息,还要推送一条消息,创建两个子类的......
  • 带你深入浅出设计模式:十二、桥接模式:连接抽象与实现的桥梁
    此为设计模式第十二谈!用总-分-总的结构和生活化的例子给你讲解设计模式!码农不易,各位学者学到东西请点赞收藏支持支持!开始部分:总:桥接模式的本质是将抽象部分与它的实现部分分离,使它们都能独立地变化。分:1.老规矩,自行打开VS创建一个控制台应用程序2.实现编码,这里以汽车......
  • 带你深入浅出设计模式:十一、组合实体模式:软件世界的乐高积木
    此为设计模式第十一谈!用总-分-总的结构和生活化的例子给你讲解设计模式!码农不易,各位学者学到东西请点赞收藏支持支持!开始部分:总:组合模式的目的:让客户端不再区分操作的是组合对象还是叶子对象,都以一个统一的方式来操作。分:1.老规矩,自行在vs创建一个控制台应用2.实现......
  • 设计模式——观察者模式
    哈喽,各位盆友们!我是你们亲爱的学徒小z,今天给大家分享的文章是设计模式的——观察者模式。定义定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。通用类图1.具体结构Subject被观察者定义被观察者必须实现的职......
  • 设计模式——门面模式 | 外观模式
    哈喽,各位盆友们!我是你们亲爱的学徒小z,今天给大家分享的文章是设计模式的——门面模式。文章目录定义通用类图1.通用结构2.优点3.缺点使用场景注意事项1.一个子系统可以有多个门面2.门面不参与子系统内的业务逻辑定义定义:要求一个子系统的外部与其内部的通信必须......
  • HourlyEmployee 和SalariedEmployee 设计模式实现
    1.1IntroductionNote:Thisassignmentisabitdifferentfromtheprevioushomework,andasksyoutopracticewithJUnit5.Ensureyoureadtheinstructionscarefullyandsubmitwhatisrequired.Volunteerworkisadmirable,butmanypeopleenjoybeingpaid......