包含标签 设计模式 的文章

设计模式学习 - 策略模式

学习、梳理设计模式。 策略模式 由策略接口、多个具体的策略实现、上下文组成。由客户端来选择具体的策略实现。 一个背景,CRM系统内有多种帐号体系:手机号注册的客户、微信授权的客户、微博授权的客户。 一个场景,需要把这些不同帐号体系的ID转换为CRM系统内部的统一UserId。 策略接口及实现 策略接口 public interface UserStrategy { long transform2UserId(String origin); } 手机号客户实现 public class MobileUserStrategy implements UserStrategy { @Override public long transform2UserId(String origin) { return 1L; } } 微信客户实现 public class OpenIdUserStrategy implements UserStrategy { @Override public long transform2UserId(String origin) { return 3L; } } 微博客户实现 public class WeiBoIdUserStrategy implements UserStrategy { @Override public long transform2UserId(String origin) { return 2L; } } 上下文 public class UserContext { private UserStrategy userStrategy; public UserContext(UserStrategy userStrategy) { this.……

阅读全文

设计模式学习 - 工厂模式

学习、梳理设计模式。 工厂模式 工厂方法模式 根据不同的对象,提供不同的工厂,然后由客户端来选择对应的工厂。这也是与简单工厂模式的不同的地方。 人 接口 public interface People { void speek(); } 男孩 public class Boy implements People { @Override public void speek() { System.out.println("boy"); } } 女孩 public class Girl implements People { @Override public void speek() { System.out.println("girl"); } } 人 工厂 public interface PeopleFactory { People getPeople(); } 男孩 工厂 public class BoyFactory implements PeopleFactory { @Override public People getPeople() { return new Boy(); } } 女孩 工厂……

阅读全文

设计模式学习 - 适配器模式

学习、梳理设计模式。 适配器模式 不兼容的转换为兼容的,为解决兼容问题而生。 实现方式可分为组合方式和继承方式。 举个例子,充电宝只能用二相电供电,但现在只有三相电该怎么办呢? 三相电实例 /** * 三相电 */ public class ThreePlug { public void powerWithThree() { System.out.println("使用三相供电"); } } 二相电接口 /** * 二相接口 */ public interface TwoPlugInterface { /** * 二相电流供电 */ void powerWithTwo(); } 充电宝 /** * 充电宝 */ public class PowerBank { /** * 需要二相供电 */ private TwoPlugInterface twoPlugInterface; public PowerBank(TwoPlugInterface twoPlugInterface) { this.twoPlugInterface = twoPlugInterface; } public void power() { twoPlugInterface.powerWithTwo(); } } 组合方式 我们来定义个三相适配器(接收三相电,对外提供二相电)。……

阅读全文

设计模式学习 - 模版方法模式

学习、梳理设计模式。 模版方法模式 模版方法模式,以继承的方式来实现,提升代码的复用性,适合具有相同或相似的步骤的逻辑处理。 由抽象基类和具体子类来具体实现。 抽象基类 具体的逻辑抽象为几个步骤,具有相同步骤的可以抽象为基本方法,不同的可以抽象为抽象方法,对于有个性化需求的(比如不是所有步骤都需要的)可以用钩子来进行控制,最后是组合这些步骤的模版方法。 基本方法 抽象方法 可选钩子(Hook) 模版方法(final) /** * 宠物基类 */ public abstract class AbstracthPet { /** * 喂食 */ public final void feedingTemplate() { //1. buyFood(); //2. cook(); //3. pourInDish(); if (isAddMilk()) { //4. addMilk(); } } protected boolean isAddMilk() { return true; } private void buyFood() { System.out.println("1. 买粮"); } protected abstract void cook(); private void pourInDish() { System.out.println("3. 倒入盘子"); } private void addMilk() { System.……

阅读全文

设计模式学习 - 单例模式

学习、梳理设计模式。 单例模式 单例模式分为饿汉模式和懒汉模式。 饿汉模式 私有化构造函数 创建私有实例 提供公开的获取实例的方法 public class Person { private static Person instance = new Person(); private Person() { } public static Person getInstance() { return instance; } } 懒汉模式 私有化构造函数 声明私有实例 提供公开的获取实例的方法(获取时为空则进行创建) public class Person { private static Person instace; private Person() { } public static Person getInstance() { if (instace == null) { return new Person(); } return instace; } } 总结 两种模式都需要先私有化构造函数以禁止直接new操作来创建实例,不然就失去了单例的意义。……

阅读全文