概述
一、工厂模式
直接获取实例与使用工厂类获取实例:(假设main方法为客户端)
直接获取实例时当修改或者添加子类,需要修改客户端
通过工厂获取实例时当子类扩充,只需要直接修改工厂类,客户端只需要根据标记即可获取相应的实例。同时,工厂模式一定程度上隐藏了实现细节,对于客户端当需要一个苹果时,只需要输入Apple即可获取,而不是new Apple去获取。
//
interface Fruit{
public void eat();
}
class Apple implements Fruit{
public void eat() {
System.out.println("eat Apple");
}
}
class Orange implements Fruit{
public void eat() {
System.out.println("eat orange");
}
}
//工厂 通过工厂类的getInstace方法获取实例。
class Factory{
public static Fruit getInstance(String className) {
if("Apple".equals(className)){
return new Apple();
}else if("Orange".equals(className)) {
return new Orange();
}
return null;
}
}
public class FactoryMode {
public static void main(String[] args) {
//直接实例化接口
new Apple().eat();
new Orange().eat();
System.out.println("");
//使用工厂获取实例
Factory.getInstance("Apple").eat();
Factory.getInstance("Orange").eat();
}
}
输出结果:
二、代理模式——代理设计
1、代理设计指一个代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其它相关业务的处理。
优点:
1).职责清晰
真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
(2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。
(3).高扩展性
常用的三种代理模式参考文章
例:
package com.shuai.ChapterSix;
interface Network{
public void browe();
}
//上网操作真实实现类
class Real implements Network{
public void browe() {
System.out.println("上网浏览信息");
}
}
//代理类 检查信息 ,调用真实请求
class Proxy implements Network{
private Network network;
public Proxy(Network network) {
this.network=network;
}
//对真实上网操作的扩展
public void check() {
System.out.println("检查操作");
}
public void browe() {
this.check();
this.network.browe();
}
}
public class ProxyMode {
public static void main(String[] args) {
Network net=new Proxy(new Real());
net.browe();
}
}
结果:
三、适配器模式
当一个类要实现一个接口时,必须覆写此接口的全部抽象方法,如果接口中定义的方法过多,且实现类并不需要接口中的所有方法时,可以设计一个中间过渡,而该过渡又不想被直接调用,可设计一个抽象类实现接口,并实现接口中的方法(没有方法体),实现类再继承该抽象类来并可以选择性的实现一些方法。
例:
package com.shuai.ChapterSix;
/**
* 适配器模式
* @author guai
*
*/
interface Window{
public void open();
public void close();
public void show();
public void activated();//窗口活动
public void iconified();//窗口最小化
public void deiconified();//关闭窗口最小化
}
abstract class WindowAdapter implements Window{
public void open() {}
public void close() {}
public void show() {}
public void activated() {}
public void iconified() {}
public void deiconified() {}
}
class WindowImpl extends WindowAdapter{
public void open() {
System.out.println("open window");
}
public void close() {
System.out.println("close window");
}
}
public class AdapterMode {
public static void main(String[] args) {
WindowImpl win= new WindowImpl();
win.open();
win.close();
}
}
结果:
最后
以上就是搞怪热狗为你收集整理的面向对象高级篇--设计模式的全部内容,希望文章能够帮你解决面向对象高级篇--设计模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复