接口 类复用

Thinking in java(5)

1. 策略模式

import java.io.*;
import java.util.*;

//策略模式

class Processor {
    public String name() {
        return getClass().getSimpleName();
    }
    Object process(Object input) { 
        return input; 
    }
}

//将字符串变为大写字母
class Upcase extends Processor {
    String process(Object input) {
        return ((String)input).toUpperCase();
    }
}

//将字符串变为小写字母
class Downcase extends Processor {
    String process(Object input) {
        return ((String)input).toLowerCase();
    }
}

public class Apply {
    public static void apply(Processor p, Object s) {
        System.out.println(p.process(s));
    }
    public static String str = "just DO iT";
    public static void main(String[] args) {
        apply(new Upcase(), str);
        apply(new Downcase(), str);
    }
}

2. 使用接口复用类

ProcessorI.java

public interface ProcessorI {
    String name();
    Object process(Object input);
}

ApplyI.java

import java.io.*;
import java.util.*;

public class ApplyI {
    public static void process(ProcessorI p, Object s) {
        System.out.println("Using Processor " + p.name());
        System.out.println(p.process(s));
    }
}

ProcessString.java

import java.io.*;
import java.util.*;

abstract class DealString implements ProcessorI{
    public String name() {
        return getClass().getSimpleName();
    }
    public abstract String process(Object input);
}

class ToUp extends DealString {
    public String process(Object input) {
        return ((String)input).toUpperCase();
    }
}

class ToDown extends DealString {
    public String process(Object input) {
        return ((String)input).toLowerCase();
    }
}

public class ProcessString {
    static String str = "Just Do It";
    public static void main(String[] args) {
        ApplyI.process(new ToUp(), str);
        ApplyI.process(new ToDown(), str);
    }
}

1.3 适配器模式

实际中碰到的大多数类我们都无法修改,因此我们可以采取适配器模式

ProcessorI.java

public interface ProcessorI {
    String name();
    Object process(Object input);
}

ApplyI.java

import java.io.*;
import java.util.*;

public class ApplyI {
    public static void process(ProcessorI p, Object s) {
        System.out.println("Using Processor " + p.name());
        System.out.println(p.process(s));
    }
}

ProcessAdapter.java

import java.io.*;

abstract class ProcessBase {
    public String name() {
        return getClass().getSimpleName();
    }
    public abstract Object process(Object input);
}

class ToUpcase extends ProcessBase {
    public String process(Object input) {
        return ((String)input).toUpperCase();
    }
}

class ToDowncase extends ProcessBase {
    public String process(Object input) {
        return ((String)input).toLowerCase();
    }
}

public class ProcessAdapter implements ProcessorI {
    private ProcessBase process;
    public ProcessAdapter(ProcessBase process) {
        this.process = process;
    }
    @Override
    public String name() {
        // TODO Auto-generated method stub
        return process.name();
    }

    @Override
    public Object process(Object input) {
        // TODO Auto-generated method stub
        return process.process(input);
    }
    public static void main(String[] args) {
        String input = "Just do It";
        ApplyI.process(new ProcessAdapter(new ToDowncase()), input);
        ApplyI.process(new ProcessAdapter(new ToUpcase()), input);
    }
}

1.4 工厂模式

import java.io.*;

//工厂模式 需提供两个类 一个类负责执行服务 另外一个类负责获取服务

interface Service {
    void method1();
    void method2();
}

interface ServiceFactory {
    Service getService();
}

class Implementation1 implements Service {
    Implementation1() {}

    @Override
    public void method1() {
        // TODO Auto-generated method stub
        System.out.println("服务1");
    }

    @Override
    public void method2() {
        // TODO Auto-generated method stub
        System.out.println("服务2");
    }
}

class Implementation1Factory implements ServiceFactory {

    @Override
    public Service getService() {
        // TODO Auto-generated method stub
        return new Implementation1();
    }
}

public class Factories {
    public static void serviceConsumer(ServiceFactory fact) {  //传入工厂 执行服务
        Service serv = fact.getService();
        serv.method1();
        serv.method2();
    }
    public static void main(String[] args) {
        serviceConsumer(new Implementation1Factory());
    }
}

转载于:https://www.cnblogs.com/xingxing1024/p/7473737.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值