`
yourenyouyu2008
  • 浏览: 287571 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

new abstract class,减少class的数量

 
阅读更多

很多情况下都有类似的逻辑,唯一的不同在于一些细节,这时我们想到了abstract 方法,通过子类重载abstract 方法,但这样会增加很多小的class,通过直接new abstract class将abstract 方法作为参数可以避免创建很多小class。

 

public abstract class Hidden{

 public void encodeEnd(FacesContext facesContext) throws IOException {
 ResponseWriter writer = facesContext.getResponseWriter();
 writer.startElement("input", this);
 writer.writeAttribute("type", "hidden", null);
 writer.writeAttribute("name", nameValue().get("name"), null);
 writer.writeAttribute("value", nameValue().get("value"), null);

 writer.endElement("input");
    }

 

    protected abstract Map nameValue();

}

相当于实例化一个AclHidden,但并没有定义AclHidden class

new Hidden() {
      public Map nameValue() {
   Map<String, String> deployMap = new HashMap<String, String>();
   deployMap.put("name", AclUtil.OLDACLGROUP);
   deployMap.put("value", AclUtil.getAclGroup());
   return deployMap;
      }
  }

相当于实例化一个DeplyHidden,但并没有定义DeplyHidden class

new Hidden() {
      public Map nameValue() {
   Map<String, String> deployMap = new HashMap<String, String>();
   deployMap.put("name", ProcessForm.BO_DEPLOYMENT_ID);
   deployMap.put("value", bussinessObjectContex
    .getDeployment().getId());
   return deployMap;
      }
  }

注:当这些直接new的 abstract  class在序列化的类中使用时会导致类不能被反序列化,报java.lang.InstantiationException异常,不明白是什么原因。

分享到:
评论

相关推荐

    Java_abstract_example.rar_abstract class_抽象

    `ConcreteClass`是`AbstractClass`的子类,实现了`doSomething()`方法,并在`main`方法中创建了`ConcreteClass`的对象,调用了继承自抽象类的方法。 抽象类的主要用途包括: 1. **封装变化**:抽象类可以封装可能...

    abstract_class:Ruby 中的抽象类

    抽象类 Ruby 中的抽象类。 像模块一样,抽象类不能被实例化。 与模块不同,抽象类可以被继承,并且它们的... new #=&gt; AbstractClass::Error - abstract class ActiveRecord::Base can't be instantiated ActiveRec

    new、abstract、virtual、override,sealed关键字区别和使用代码示例

    C# 中的 new、abstract、virtual、override、sealed 关键字的区别和使用代码示例 摘要:本资源旨在对 C# 中的 new、abstract、virtual、override、sealed 关键字进行详细的解释和比较,并提供实践代码示例,以帮助...

    java实验7.2(Auto.java Ford.java)

    Create an abstract Auto class with fields for the car make and price. Include get and set methods for these fields; the setPrice() method is abstract. Create two suclasses for individual automobile ...

    java 设计模式 静态代理模式

    public abstract class Subject // 抽象角色 { public abstract void requst(); } ———————————————————————————————— package liang; public class ReallSubject extends ...

    Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)

    这里我们将深入探讨三种常见的Java设计模式:单例(Singleton)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。 **单例模式(Singleton)** 单例模式确保一个类只有一个实例,并提供一个全局访问点...

    Java中的动态代理模式.doc

    new Class[]{AbstractClass.class}, invoker1); // 调用 ClassA 的 show 方法 ac1.show(); // 创建具体类 ClassB 的处理对象 Invoker invoker2 = new Invoker(new ClassB()); // 获得具体类 ClassB 的代理 ...

    C#中new用法(一道面试题目)

    public abstract class BaseClass { protected BaseClass() { // 构造函数前有new修饰符,防止直接实例化 } } public class DerivedClass : BaseClass { public DerivedClass() { // 可以实例化派生类 } } ...

    VB.NET面向对象CLASS的实现

    7. **抽象类与密封类(Abstract and Sealed Classes)** 抽象类不能被实例化,通常用于定义基类。密封类不允许被继承。在VB.NET中,使用`MustInherit`和`NotInheritable`关键字标识它们。 8. **构造函数与析构函数...

    asp.net 相关的模拟面试题

    ASP.NET面试模拟题 选择题 int[][] myArray3=new int[3][]{new int...abstract class BaseClass { public virtual void MethodA() { Console.WriteLine("BaseClass"); } public virtual void MethodB() { } }

    设计模式C++学习之抽象工厂模式(AbstractFactory)

    AbstractFactory* factory1 = new ConcreteFactory1(); AbstractProductA* productA1 = factory1-&gt;createProductA().release(); AbstractProductB* productB1 = factory1-&gt;createProductB().release(); ...

    java设计模式示例

    abstract class Animal1{} class Dog1 extends Animal1{} class Cat1 extends Animal1{} abstract class AnimalFactory{ public abstract Animal1 getAnimal(); } class DogFactory extends ...

    TemplateMethod.zip

    AbstractClass* obj1 = new ConcreteClass1(); obj1-&gt;templateMethod(); // 输出: ConcreteClass1: 执行操作1, ConcreteClass1: 执行操作2 AbstractClass* obj2 = new ConcreteClass2(); obj2-&gt;templateMethod...

    C#创建、销毁对象和继承

    在这里,`DerivedClass`必须实现`AbstractClass`的`AbstractMethod()`。 总结起来,C#中的对象创建、销毁和继承涉及了类的构造方法、初始化、内存管理、多态性以及资源的有效利用。理解并熟练运用这些概念是成为一...

    AbstractFactory案例代码

    public class DatabaseConnectionFactory { public static IDatabaseConnection CreateDatabaseConnection(string dbType) { if (dbType == "SQLServer") { return new SQLServerDatabaseConnection(); } else ...

    Template(模板模式)

    AbstractClass* obj1 = new ConcreteClass1(); obj1-&gt;templateMethod(); AbstractClass* obj2 = new ConcreteClass2(); obj2-&gt;templateMethod(); delete obj1; delete obj2; return 0; } ``` 编译过程会...

    PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解

    在这个例子中,`AbstractClass`是抽象类,包含两个抽象方法,`ConcreteClass1`和`ConcreteClass2`是它的子类,实现了这两个抽象方法。`printOut`方法是普通方法,子类可以选择是否覆盖。 了解并正确使用`abstract`...

    Head First 设计模式 (八) 模板方法模式(Template Method pattern) C++实现

    AbstractClass* obj1 = new ConcreteClass1(); obj1-&gt;templateMethod(); AbstractClass* obj2 = new ConcreteClass2(); obj2-&gt;templateMethod(); delete obj1; delete obj2; return 0; } ``` 在这个例子...

    js代码-基于class的抽象基类,通过new.target来实现。由于类的原型在实例化对象的时候就存在了,因此可以通过this来检查类是否实现了某个方法

    class AbstractClass { abstractMethod() { throw new Error('This is an abstract method and must be implemented in a subclass.'); } } ``` 这里,`abstractMethod`就是一个抽象方法,如果子类没有重写它,...

    抽象工厂模式(Abstract Factory Pattern)

    public abstract class AbstractClothes { public abstract AbstractCoat CreateCoat(); public abstract AbstractTrousers CreateTrousers(); } ``` - **抽象产品角色** ```csharp public abstract class...

Global site tag (gtag.js) - Google Analytics