设计模式
zhangphil
zhangphil@live.com
展开
-
Java自带的迭代器Iterator
import java.util.Iterator;public class Item<T> implements Iterator { private int pos = 0; private T[] array; public Item(T[] array) { if (array == null) { thr...原创 2020-02-12 23:03:12 · 501 阅读 · 0 评论 -
Java架构设计:状态机模式连接适配器调度复杂任务
Java架构设计:状态机模式连接适配器调度复杂任务假设现在系统架构中定义了一批状态机关键值,每一个状态机关键值对应一个任务的某些执行调度模块(函数),而这些执行调度模块又要执行相应的逻辑回调(接口)。设计目标:支持扩展和高度解耦。现在以Java设计模式中的状态机模式为主体,各模块之间尽可能解耦,在用适配器把状态机关键值与任务的执行调度,已经相应的逻辑回调连接起来。为此架构设计建立抽象模...原创 2019-06-08 23:26:26 · 1483 阅读 · 0 评论 -
Android MVP设计架构:Model层数据传递到View层
一个常见的场景:处于UI的View层点击了下载的Button按钮,然后转入到Presenter层,此时当然会在Presenter层里面触发Model层的下载任务代码模块。但是,View层UI控件需要实时显示下载进度怎么办?要知道只有Model层才真正知道下载进度,Presenter层对进度一无所知。对于这种情况有两种方法把需要在Presenter层的函数里面,当在调用Model层的下载请求时候...原创 2019-05-28 23:40:52 · 2302 阅读 · 1 评论 -
Java设计模式:经典MVC设计框架
/** * MVC模式中的M,Model。 * * @author zhangfly * */public class StudentModel { private String name; private int id; public void setName(String name) { this.name = name; } public String ge...原创 2019-05-19 23:32:32 · 1798 阅读 · 3 评论 -
Android的MVP设计架构:网络加载图片为例
再写一个Android中MVP的实例,该例子通过okhttp加载一张网络图片到ImageView,使用MVP设计架构实现。架构的抽象建模:package zhangphil.pattern;/** * MVP中的M,Model */public interface Model<T1, T2> { T1 request(T2 t2);}...原创 2019-05-24 23:28:12 · 656 阅读 · 0 评论 -
Android中的MVP设计架构
Android中的MVP设计架构MVP在Android开发中的应用,最核心的目的是为了解耦Activity或Fragment承载的繁杂逻辑。因为在Android体系架构的设计中,是允许Activity或Fragment中围绕View和Model发展出复杂逻辑代码,这样最终的结果——绝大多数情况下,几乎必然造成每一个Activity或Fragment非常臃肿。MVP在Android架构设计中...原创 2019-05-21 23:47:13 · 905 阅读 · 0 评论 -
Java设计模式:访问者模式,同一数据对象,不同访问者索取目的不同
/** * 员工接受不同部门的数据访问。 * 但是不同部门访问该名员工获取的数据不相同。 * * @author zhangfly * * @param <T> */public abstract class Employee<T> { public abstract void accept(Department department); pu...原创 2019-07-24 23:25:49 · 1076 阅读 · 0 评论 -
Java设计模式:策略Strategy模式,以电影票折扣策略为例
/** * 折扣策略。 * * @author zhangfly * */public interface DiscountStrategy { public double getDiscountPrice(double value);}/** * 电影票模型。 * * @author zhangfly * */public class MovieT...原创 2019-05-29 23:35:43 · 2265 阅读 · 0 评论 -
Java设计模式:状态机模式,以屏幕缩放为例
public abstract class State { public abstract void display();}public class Screen { private State currentState; public Screen() { currentState = new NormalState(); } public void set...原创 2019-06-06 00:01:05 · 565 阅读 · 0 评论 -
Java设计模式:透明式合成模式
import java.util.List;/** * 文件和文件夹共同的抽象模型。 * */public abstract class Component { public abstract void print(String s); public void addChild(Component child) { throw new Unsupp...原创 2019-06-17 23:19:26 · 426 阅读 · 0 评论 -
Java设计模式:装饰模式以赋予普通人多种能人成为超人为例
//抽象超人,具备的技能。public interface Superman { //技能 void haveSkill();}/** * 该普通人将是被装饰的目标对象。 * 最终将赋予全能,成为超人。 */public class Human implements Superman { @Override public void have...原创 2019-10-18 23:12:07 · 394 阅读 · 0 评论 -
Java命令模式,一个简单示例
public interface Command { void exe();}public class Light { public void on(){ System.out.println("打开"); }}public class LightCommand implements Command { private...原创 2020-03-08 23:13:20 · 641 阅读 · 0 评论 -
Android系统自带的层次状态机StateMachine(Hierarchical State Machine)
Android系统自带的层次状态机StateMachine(Hierarchical State Machine)Android在framework层自己实现一套层次状态机,总共有三个类:StateMachine,State和IState,这三个类直接从Android平台代码中没有公开出来提供给开发者使用,但是可以直接把源代码复制出来使用,见附录源代码。下一个Android平台自带的层次状...原创 2019-07-03 23:31:43 · 2563 阅读 · 0 评论 -
Java设计模式:游戏中的角色和武器抽象设计
/** * 抽象游戏角色模型。 * 一个角色可以战斗,但是战斗需要武器。 */public abstract class Role { private Weapon weapon; public void fight() { weapon.use(); } public void setWeapon(Weapon w) { ...原创 2020-01-14 23:02:39 · 2259 阅读 · 0 评论 -
Java设计模式:桥梁模式解决的痛点例子(2)
通常情况一台电视机配置一种对应的遥控器,但是这种情况下,每当有一种新的电视机后,就不得不增加一种新的遥控器。因为电视机模块在变化,遥控器模块中控制逻辑相对文档。现在引入Java设计模式中的桥接模式,解决这种情况。public interface TV { void on(); void off(); void setChannel(int number);}...原创 2019-10-24 23:55:15 · 435 阅读 · 0 评论 -
Java设计模式:农场不同季节生成不同蔬菜水果的一种抽象工厂模式
Java设计模式:农场不同季节生成不同蔬菜水果的一种抽象工厂模式/** * 农场的抽象。不同季节生产不同的蔬菜和水果。 */public interface Farm { //不同季节,不同蔬菜和水果。 int WINTER = 1; //冬季。 int SUMMER = 2; //夏季。 Fruit makeFruit(); //制造水果。 ...原创 2019-08-31 23:02:36 · 1299 阅读 · 0 评论 -
Java设计模式:模板模式
Java模板模式的一种是把共同的模板化行为抽象,如果这些行为是固定模式执行的,还可以再次提供一个固定的模板方法。如人活着就离不开吃饭,喝水,工作,睡觉,凡人概莫能外。抽象人的行为:public abstract class Human { /** * 吃饭。 */ public abstract void eat(); /** * ...原创 2019-08-29 23:24:14 · 378 阅读 · 0 评论 -
Java平台原生Proxy代理把MVP中普通函数接口切换调度到Android UI主线程
Java平台原生Proxy代理把MVP中普通函数接口切换调度到Android UI主线程在Android开发者,这种线程切换的需求场景很常见,比如在后台普通的Java线程展开了一项耗时的操作(比如下载一个大文件),下载时候需要实时更新下载进度。普通Java线程不能直接接触Android UI主线程的View,因此在后台获得下载进度后,需要切换到Android UI主线程把数值设置到Androi...原创 2019-06-16 23:11:43 · 639 阅读 · 0 评论 -
Java设计模式:桥接模式解决的架构设计痛点
现象痛点:现在创建一个工厂,工厂的日常运行是生产和销售。如:public abstract class Factory { /** * 生产 */ public abstract void produce(); /** * 销售 */ public abstract void sell(); /** ...原创 2019-06-19 23:24:12 · 338 阅读 · 0 评论 -
Java设计模式:备忘录模式,历史记录状态回滚回退
以棋类游戏中的“悔棋”为例。public class Chessman { private String tag; private int point; public void set(String tag, int point) { this.tag = tag; this.point = point; } // 保存状态。 public ChessmanMemo...原创 2019-07-01 23:49:04 · 1206 阅读 · 0 评论 -
Java设计模式:迭代器模式
public interface AbstractIterator<E> { public boolean hasNext(); public E next();}import java.util.ArrayList;import java.util.List;public abstract class AbstractObjectList<E>...原创 2019-07-21 23:06:04 · 613 阅读 · 0 评论 -
Java设计模式:状态机模式
public class State { private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } public void method1() { System.out.pri...原创 2019-04-21 23:33:13 · 3506 阅读 · 0 评论 -
Java设计模式:命令模式
以司令发布命令,士兵执行命令为例。//执行命令的士兵。public class Solider { // 执行的动作。 public void action() { System.out.println("Solider action!"); }}//命令。public interface Command { // 执行。 void exe();}pu...原创 2019-04-19 23:24:30 · 346 阅读 · 0 评论 -
Java设计模式:观察者模式
import java.util.ArrayList;public abstract class Observable { private ArrayList<Observer> observers = new ArrayList(); public void addObserver(Observer observer) { observers.add(observer...原创 2019-04-17 23:38:54 · 298 阅读 · 0 评论 -
Java观察者模式 : Observer / Observable
/**Java观察者模式的场景:一个女孩洗澡,被很多男孩偷看。女孩洞察后,搜索坏男孩,然后继续洗澡。三个类:Boy,Girl还有主类MainClass。*//*男孩Boy.java*/import java.util.Observable;import java.util.Observer;public class Boy implements Observer{...原创 2015-02-12 20:05:54 · 1363 阅读 · 0 评论 -
Java设计模式:桥接模式
public interface Sourceable { void method();}public class Source1 implements Sourceable{ @Override public void method() { System.out.println("Source1 method"); }}public class Sou...原创 2019-04-15 23:09:16 · 1088 阅读 · 0 评论 -
Java设计模式:Proxy代理模式
public interface Sourceable { void method();}public class Source implements Sourceable{ @Override public void method() { System.out.println("Source method"); }}public class Proxy...原创 2019-03-25 23:42:31 · 412 阅读 · 0 评论 -
Java设计模式:Adapter适配器模式
目标是把Source的功能拓展到Targetable中去。需要一个适配器Adapter完成。public class Source { public void method1() { System.out.println("Source method1"); }}public interface Targetable { void method1(); void m...原创 2019-04-13 23:20:30 · 394 阅读 · 0 评论 -
Java设计模式:工厂模式
public interface Sender { void send(); }public class SmsSender implements Sender { @Override public void send() { System.out.println("SmsSender send()"); } } ...原创 2019-03-21 23:11:11 · 546 阅读 · 1 评论 -
Java设计模式:装饰模式
假设Source类是需要被装饰的类,Decorator类是一个提供装饰功能的类,Decorator动态为Source添加功能。public interface Sourceable { void method();}public class Source implements Sourceable{ @Override public void method() {...原创 2019-03-23 23:54:25 · 267 阅读 · 0 评论 -
Java设计模式:访问者模式
public interface Visitor { void visit(Subject sub);}public interface Subject { void accept(Visitor visitor); String getSubject();}//访问者。public class MyVisitor implements Visitor { @...原创 2019-04-23 23:33:24 · 349 阅读 · 0 评论 -
Java设计模式:中介模式
public interface Mediator { void createMediator(); void workAll();}//中介。public class MyMediator implements Mediator { private User user1; private User user2; @Override public void crea...原创 2019-05-26 23:24:21 · 314 阅读 · 0 评论 -
Java设计模式:一种流行的句点“建造”模式
public class Config { private String tag; private String id; private String link; public Config(Builder builder) { tag = builder.tag; id = builder.id; link = builder.link; } public Stri...原创 2019-07-13 23:18:22 · 309 阅读 · 0 评论 -
Java设计模式:组合模式
组合模式的一个典型应用比如系统的文件系统,文件系统里面有文件和目录,目录里面又有文件。组合模式适合把文件和目录“组合”在一起。File代表文件,Dir代表目录,Component代表一种文件和目录共有的抽象。public abstract class Component { public abstract String getName(); public abstract void a...原创 2019-06-25 23:36:51 · 523 阅读 · 0 评论 -
Java设计模式:命令模式演示加法计算器
/** * 加法器,计算求和。 * * @author zhangfly * */public class Adder { private int sum = 0; public int add(int value) { System.out.print("加法器计算:" + sum + "+(" + value + ")="); sum = sum + value;...原创 2019-05-09 23:28:38 · 3133 阅读 · 3 评论 -
Java设计模式:命令模式(动作模式/事物模式)
参考附录文章1。再写一个例子说明命令模式。/** * 命令。比如发布的一个命令(进攻,撤退)。 * * @author zhangfly * */public abstract class Command { public abstract void execute();}/** * 抽象的命令接受者。比如solder。 * * @author zhan...原创 2019-10-09 23:54:53 · 440 阅读 · 0 评论 -
Java设计模式:半透明装饰模式
通常的装饰模式是透明装饰模式。本文写一个半透明装饰模式。/** * 一个通用的抽象批条模型。 * * @author zhangfly * */public interface Document { void display();}/** * 请假条。 * 后续需要为其增加审批功能。 * * @author zhangfly * */public c...原创 2019-07-07 23:29:43 · 1379 阅读 · 0 评论 -
Java设计模式:责任链审批模式
/** * 采购单审批者。 * * @author zhangfly * */public abstract class Approver { protected Approver successor; // 后继审批对象。 protected String name; // 审批者姓名。 public Approver(String name) { this.name...原创 2019-06-22 23:18:07 · 2571 阅读 · 0 评论 -
Java设计模式:装饰模式,以多样性窗体装饰为例
UI设计给出的一个普通窗体,最原始的窗体可能只显示一些基本内容,但是后续会逐渐增加更多内容,如为窗体增加滚动条,为窗体增加边框,这种场景非常适合装饰模式。抽象的所有窗体的父类:public abstract class Component { public abstract void display();}一个基本原始的窗体:public class Window ...原创 2019-04-26 23:45:05 · 400 阅读 · 0 评论 -
Java设计模式:建造者模式
public class Product { private String partA; private String partB;}public abstract class Builder { protected Product product = null; public abstract void buildPartA(); public abstrac...原创 2019-06-12 23:23:21 · 352 阅读 · 0 评论